package chapter07._01_ExceptionHanding;

import java.io.EOFException;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Scanner;

/**
 * @Version:
 * @Description: 学习如何抛出异常
 * @LastDate: 2020/10/10
 */
public class Test01_HowToThrowException {

    public static void main(String[] args) throws IOException {
        System.out.println(Test01_HowToThrowException.readData(new Scanner(
                Path.of("fundamentals/chapter07/_01_ExceptionHanding/Docs/input"))));
    }

    /*
    * 如果有可能发生异常，第一件事就是确认异常的类型。
    * 比如读取文件时，意外停止
    * 此时应该选择EOFException(End OF File)
    * 修改方法首部，声明可能异常。
    * */
    public static String readData(Scanner in) throws EOFException {
        int n = 0;
        int len = 10;
        String s = new String();

        while (n < len) {
            if (!in.hasNext()) {
                /*
                * 一旦来到这里，抛出异常，程序就不会正常返回，直接结束。
                * */
                if (n < len) throw new EOFException("There is EOFException." +
                        " Actual_length:" + n + ", Expectation:" + len + ".");
                //or
                /*
                * var e = new EOFException();
                * throw e;
                * */
                /*
                * 除了默认的无参构造器，还有一个带字符串参数的构造器，用于传递消息。
                * throw new EOFException("There is EOFException");
                * */
            } else {
                ++n;
                s += in.nextInt();
            }
        }

        return s;
    }
}
